package config

import (
	"fmt"
	"log"

	"github.com/spf13/viper"
)

func initConfig() {
	// 设置配置文件名称（不带扩展名），如果程序设置了命令行参数或环境变量，则这里可以是空的
	viper.SetConfigName("db")

	// 设置配置文件类型
	viper.SetConfigType("yaml")

	// 设置查找配置文件的路径
	// 可以是多个路径，这里我们设置当前工作目录
	viper.AddConfigPath("config")

	// 读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			// 配置文件未找到，但可能不是错误
			fmt.Println("Config file not found; using defaults")
		} else {
			// 发生其他错误
			log.Fatalf("Fatal error config file: %s", err)
		}
	}
}

func TestReadConfig() {
	// 初始化配置
	initConfig()

	// 读取配置值
	// 可以使用viper.GetString、viper.GetInt、viper.GetBool等方法来读取不同类型的值
	dbHost := viper.GetString("database.host")
	dbPort := viper.GetInt("database.port")
	dbName := viper.GetString("database.name")
	dbUser := viper.GetString("database.username")
	dbPassword := viper.GetString("database.password")

	// 打印读取到的配置值
	fmt.Printf("Database Host: %s\n", dbHost)
	fmt.Printf("Database Port: %d\n", dbPort)
	fmt.Printf("Database Name: %s\n", dbName)
	fmt.Printf("Database User: %s\n", dbUser)
	fmt.Printf("Database Password: %s\n", dbPassword)

	// 也可以绑定到环境变量或命令行参数
	// viper.BindPFlag("somekey", pflag.Lookup("someflag"))
	// viper.AutomaticEnv() // 读取环境变量

	// 其他的Viper操作...
}
